// 定义目标接口 `Target`，规定了请求方法的接口。
trait Target {
    fn request(&self) -> String; // 请求方法返回一个字符串
}

// 被适配的结构体 `Adaptee`。
struct Adaptee;

// `Adaptee` 结构体的实现。
impl Adaptee {
    // 具体请求方法 `specific_request()`，返回特定的字符串。
    fn specific_request(&self) -> String {
        "具体请求".to_string()
    }
}

// 适配器 `Adapter` 结构体，包含一个 `Adaptee` 对象。
struct Adapter {
    adaptee: Adaptee, // 适配器持有一个被适配对象的实例
}

// `Adapter` 结构体的实现。
impl Adapter {
    // 构造函数 `new()`，初始化适配器并传入被适配对象 `Adaptee`。
    fn new(adaptee: Adaptee) -> Self {
        Self { adaptee }
    }
}

// `Adapter` 结构体也实现了 `Target` 接口，重写了 `request()` 方法。
impl Target for Adapter {
    fn request(&self) -> String {
        self.adaptee.specific_request() // 调用被适配对象的具体请求方法
    }
}

// 主函数入口 `main()`，演示适配器模式的使用。
pub fn main() {
    let adaptee = Adaptee; // 创建被适配对象 `Adaptee` 的实例
    let adapter = Adapter::new(adaptee); // 创建适配器 `Adapter` 的实例，传入被适配对象
    println!("Adapter: {}", adapter.request()); // 调用适配器的请求方法，并打印结果
}
